/*
 * PedidoConexao.java
 *
 * Criado em 20 de Agosto de 2007, 17:29
 */

package codebreaker.protocolo;

import java.nio.ByteBuffer;

/**
 * Classe que define um pacote de rede do protocolo Code Breaker.
 * O pacote PEDIDO_CONEXAO é enviado do cliente para o servidor,
 * na porta de negociação(9999) para solicitar uma conexao.
 *
 * @author Rodrigo
 */
public class PedidoConexao extends Pacote {
    
    public static final int ID = 0;
    public static final int TAMANHO = Constantes.TAMANHO_NOME;
    
    private String nome;
    
    /**
     * Cria uma nova instância de PedidoConexao
     */
    public PedidoConexao() {
	super();
    }
    
    /**
     * Cria um pacote a partir de um conjunto de bytes
     * @param bytes Conjunto de bytes
     * @param withID Sinaliza se os bytes tem o id do pacote
     */
    public PedidoConexao(byte bytes[], boolean withID) {
	super(bytes, withID);
    }
    
    /**
     * Cria uma nova instância de PedidoConexao
     * @param nome Apelido do jogador
     */
    public PedidoConexao(String nome) {
	this();
	this.nome = nome;
    }
    
    protected void fromBytes(ByteBuffer buffer) {
	
	nome = "";
	for (int i = 0; i < Constantes.TAMANHO_NOME; i++) {
	    byte dado = buffer.get();
	    
	    if (dado != 0) 
		nome = nome.concat(String.valueOf((char)dado));
	    else
		break;
	}
    }
    
    public byte getID() {
	return ID;
    }
    
    public int getTamanho() {
	return TAMANHO;
    }
    
    protected void writeBytes(ByteBuffer buffer) {
	byte bufferNome[] = nome.getBytes();		
	
	for (int i = 0; i < Constantes.TAMANHO_NOME; i++)	    
	    buffer.put((i < bufferNome.length)? bufferNome[i] : 0);
    }
    
    public String getNome() {
	return nome;
    }
    
    public void setNome(String nome) {
	this.nome = nome;
    }
    
    /**
     * Retorna uma representacao do pacote
     * em texto(string)
     * @return Texto representando o pacote
     */
    public String toString() {
	return nome + " quer se conectar";
    }
}
